// 简单的 Markdown 解析器（不依赖外部库）
// 注意：如果需要更完整的功能，建议安装 markdown-it 和 html-docx

/**
 * 简单的 Markdown 转 HTML 函数
 */
function markdownToHtml(markdown: string): string {
  return markdown
    // 标题
    .replace(/^### (.*$)/gm, '<h3>$1</h3>')
    .replace(/^## (.*$)/gm, '<h2>$1</h2>')
    .replace(/^# (.*$)/gm, '<h1>$1</h1>')
    // 粗体和斜体
    .replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
    .replace(/\*(.*?)\*/g, '<em>$1</em>')
    // 代码
    .replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>')
    .replace(/`(.*?)`/g, '<code>$1</code>')
    // 链接
    .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>')
    // 列表
    .replace(/^\* (.*$)/gm, '<li>$1</li>')
    .replace(/^- (.*$)/gm, '<li>$1</li>')
    .replace(/^(\d+)\. (.*$)/gm, '<li>$1. $2</li>')
    // 引用
    .replace(/^> (.*$)/gm, '<blockquote>$1</blockquote>')
    // 换行
    .replace(/\n\n/g, '</p><p>')
    .replace(/\n/g, '<br>');
}

/**
 * 将 Markdown 转换为 Word 文档（HTML格式，可被Word打开）
 * @param markdown Markdown 内容
 * @param filename 文件名（不含扩展名）
 * @returns Promise<void>
 */
export async function convertMarkdownToWord(markdown: string, filename: string = 'document'): Promise<void> {
  try {
    // 将 Markdown 转换为 HTML
    const html = markdownToHtml(markdown);

    // 创建完整的 HTML 文档结构
    const fullHtml = `
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>${filename}</title>
          <style>
            body {
              font-family: 'Microsoft YaHei', Arial, sans-serif;
              line-height: 1.6;
              color: #333;
              max-width: 800px;
              margin: 0 auto;
              padding: 20px;
            }
            h1, h2, h3, h4, h5, h6 {
              color: #2c3e50;
              margin-top: 24px;
              margin-bottom: 16px;
            }
            h1 { font-size: 2em; border-bottom: 2px solid #eee; padding-bottom: 10px; }
            h2 { font-size: 1.5em; border-bottom: 1px solid #eee; padding-bottom: 8px; }
            h3 { font-size: 1.25em; }
            p { margin-bottom: 16px; }
            code {
              background-color: #f8f8f8;
              border: 1px solid #e1e4e8;
              border-radius: 3px;
              padding: 2px 4px;
              font-family: 'Consolas', 'Monaco', monospace;
            }
            pre {
              background-color: #f8f8f8;
              border: 1px solid #e1e4e8;
              border-radius: 6px;
              padding: 16px;
              overflow: auto;
            }
            pre code {
              background: none;
              border: none;
              padding: 0;
            }
            blockquote {
              border-left: 4px solid #dfe2e5;
              padding-left: 16px;
              margin-left: 0;
              color: #6a737d;
            }
            table {
              border-collapse: collapse;
              width: 100%;
              margin-bottom: 16px;
            }
            th, td {
              border: 1px solid #dfe2e5;
              padding: 8px 12px;
              text-align: left;
            }
            th {
              background-color: #f6f8fa;
              font-weight: bold;
            }
            ul, ol {
              padding-left: 24px;
              margin-bottom: 16px;
            }
            li {
              margin-bottom: 4px;
            }
          </style>
        </head>
        <body>
          <p>${html}</p>
        </body>
      </html>
    `;

    // 创建 HTML 文件下载（可以被 Word 打开）
    const htmlBlob = new Blob([fullHtml], { type: 'text/html;charset=utf-8' });

    // 下载文件
    const url = URL.createObjectURL(htmlBlob);
    const link = document.createElement('a');
    link.href = url;
    link.download = `${filename}.html`;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }
  catch (error) {
    console.error('转换为Word文档失败:', error);
    throw new Error('转换为Word文档失败，请稍后重试');
  }
}

/**
 * 方案2: 使用 docx 库创建更专业的 Word 文档
 * 需要安装: npm install docx
 */
export async function convertMarkdownToWordAdvanced(markdown: string, filename: string = 'document'): Promise<void> {
  try {
    // 这里可以使用 docx 库创建更专业的 Word 文档
    // import { Document, Packer, Paragraph, TextRun, HeadingLevel } from 'docx'

    // 解析 Markdown 并创建 Word 文档结构
    // const tokens = md.parse(markdown, {})

    // 创建 Word 文档（示例代码，需要根据实际需求调整）
    /*
    const doc = new Document({
      sections: [{
        properties: {},
        children: tokens.map(token => {
          switch (token.type) {
            case 'heading_open':
              return new Paragraph({
                text: token.content,
                heading: HeadingLevel.HEADING_1
              })
            case 'paragraph_open':
              return new Paragraph({
                children: [new TextRun(token.content)]
              })
            default:
              return new Paragraph({
                children: [new TextRun(token.content || '')]
              })
          }
        })
      }]
    })

    const buffer = await Packer.toBuffer(doc)
    const blob = new Blob([buffer], {
      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    })
    */

    // 临时实现
    const blob = new Blob([markdown], { type: 'text/plain' });

    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = `${filename}.docx`;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }
  catch (error) {
    console.error('高级Word转换失败:', error);
    throw new Error('Word文档生成失败，请稍后重试');
  }
}

/**
 * 方案3: 使用 RTF 格式（Rich Text Format）
 * RTF 格式可以被 Word 打开，且实现相对简单
 */
export function convertMarkdownToRTF(markdown: string, filename: string = 'document'): void {
  try {
    // 简单的 Markdown 到 RTF 转换
    let rtf = '{\\rtf1\\ansi\\deff0 {\\fonttbl {\\f0 Times New Roman;}}\\f0\\fs24 ';

    // 简单的标签替换（实际项目中需要更完善的转换）
    const text = markdown
      .replace(/^# (.*$)/gm, '\\fs32\\b $1\\b0\\fs24\\par ')
      .replace(/^## (.*$)/gm, '\\fs28\\b $1\\b0\\fs24\\par ')
      .replace(/^### (.*$)/gm, '\\fs26\\b $1\\b0\\fs24\\par ')
      .replace(/\*\*(.*?)\*\*/g, '\\b $1\\b0 ')
      .replace(/\*(.*?)\*/g, '\\i $1\\i0 ')
      .replace(/`(.*?)`/g, '\\f1 $1\\f0 ')
      .replace(/^\* (.*$)/gm, '\\bullet $1\\par ')
      .replace(/^- (.*$)/gm, '\\bullet $1\\par ')
      .replace(/^> (.*$)/gm, '\\i $1\\i0\\par ')
      .replace(/\n\n/g, '\\par\\par ')
      .replace(/\n/g, '\\par ');

    rtf += `${text}}`;

    const blob = new Blob([rtf], { type: 'application/rtf' });
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = `${filename}.rtf`;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }
  catch (error) {
    console.error('RTF转换失败:', error);
    throw new Error('RTF文档生成失败，请稍后重试');
  }
}
